/**
 * ReportGear(2011)
 */
package com.reportgear.report.model.script;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import net.abbp.core.util.NumberUtils;

/**
 * 计算引擎中使用的对象处理辅助类
 * 
 * @version 1.0 2011-4-10
 * @author <a herf="lexloo@gmail.com">lexloo</a>
 * @since Report 1.0
 */
public class ObjectUtils {
	private static final Logger logger = LoggerFactory.getLogger(ObjectUtils.class.getName());

	/**
	 * 两个对象相加
	 * 
	 * @param p1
	 *            参数1
	 * @param p2
	 *            参数2
	 * @return 相加后的结果
	 */
	public static Object add(Object p1, Object p2) {
		try {
			return NumberUtils.convertToDouble(p1) + NumberUtils.convertToDouble(p2);
		} catch (Exception ex) {
			logger.warn(ex.getMessage());
			if ((p1 instanceof String) || (p2 instanceof String)) {
				return "" + p1 + p2;
			}
			return 0.0D;
		}
	}

	/**
	 * 两个对象相减
	 * 
	 * @param p1
	 *            参数1
	 * @param p2
	 *            参数2
	 * @return 相减后的结果
	 */
	public static Object sub(Object p1, Object p2) {
		try {
			return NumberUtils.convertToDouble(p1) - NumberUtils.convertToDouble(p2);
		} catch (Exception ex) {
			logger.warn(ex.getMessage());
			return 0.0D;
		}
	}

	/**
	 * 两个对象相乘
	 * 
	 * @param p1
	 *            参数1
	 * @param p2
	 *            参数2
	 * @return 相乘后的结果
	 */
	public static Object mult(Object p1, Object p2) {
		try {
			return NumberUtils.convertToDouble(p1) * NumberUtils.convertToDouble(p2);
		} catch (Exception ex) {
			logger.warn(ex.getMessage());
			return 0.0D;
		}
	}

	/**
	 * 两个对象相除
	 * 
	 * @param p1
	 *            参数1
	 * @param p2
	 *            参数2
	 * @return 相除后的结果
	 */
	public static Object div(Object p1, Object p2) {
		try {
			return NumberUtils.convertToDouble(p1) / NumberUtils.convertToDouble(p2);
		} catch (Exception ex) {
			logger.warn(ex.getMessage());
			return 0.0D;
		}
	}
}
